/**
 * md 文档相关的函数
 * 检查 indexedDB 里面是否有 对应的 文档
 * 从 indexedDB 的增删改查
 * 
 * 用 axios 获取 对应的 文档
 * 
 */

import { toRaw } from 'vue'
import config from '../config/index.js'

/**
 * 文档的管理
 */
export default function mdController () {
  
  // 获取文档信息
  const loadDoc = (docId, ver = 1) => {
    const url = `${config.baseUrl}docs/guide/${docId}.json?ver=${ver}`
    return new Promise((resolve, reject) => {
      config.axios.get(url).then((res) => {
        // console.log('文档信息 - by axios', res.data)
        const projectInfo = res.data
        resolve(projectInfo) // 返回文档
      }).catch((res) => {
        // console.log('文档信息 - by axios -- error ', res)
        if (res.response.status === 404) {
          // 没有找到文档
        }
        const err = {
          md: '# 没有 json 格式的文档', // 编辑文档的内容
          time: '', // 发布时间
          lastTime: '', // 最后修改时间
          code: [{
            id: '',
            isRun: false,
            js: '',
            template: '',
            style: ''
          }], // 一个文档包含的可以运行的代码，js 和 template
          comp: {} // 一个文档包含的可以运行的组件 上一步、下一步
        }
        reject(err)
      })
    })
  }

  // 文档
  const loadDocById = (docId, ver = 1) => {
    // 获取 文档 的 仓库对象
    const { doc: dbDoc } = config.help.stores()

    return new Promise((resolve, reject) => {
      dbDoc.get(docId).then((md) => {
        if (md) {
          // 有了，查看版本
          if (md.ver < ver) {
            // 版本不一致，加载新的
            loadDoc(docId, ver).then((md) => {
              // 有文件
              md.ver = ver
              dbDoc.set(md)
              resolve(md)
            }).catch((md) => {
              // 没有有文件
              // dbDoc.add(md)
              resolve(md)
            })
          }
          if (!md.code) {
            md.code = [{
              id: '',
              isRun: false,
              js: '',
              template: '',
              style: ''
            }]
          }
          resolve(md)
        } else {
          // 数据库里没有  用 axios 获取
          loadDoc(docId, ver).then((md) => {
            // 有文件
            md.ver = ver
            dbDoc.set(md)
            resolve(md)
          }).catch((md) => {
            // 没有有文件
            // dbDoc.add(md)
            resolve(md)
          })
        }   
      })
    })
  }

  /**
   * 保存文档
   * @param {*} current 当前激活的信息
   */
  const saveDoc = async (current) => {
    // console.log('保存', current)
    const { doc: dbDoc } = config.help.stores()

    const _docInfo = toRaw(current.docInfo)

    const newDoc = {
      docId: current.menuInfo.menuId,
      ver: current.ver,
      md: _docInfo.md,
      time: new Date().valueOf(),
      lastTime: new Date().valueOf(),
      code: _docInfo.code, // 一个文档包含的可以运行的代码，js 和 template
      comp: _docInfo.comp // 一个文档包含的可以运行的组件 上一步、下一步
    }
    dbDoc.set(newDoc).then((res) => {
      // console.log('保存成功！', res)
    })
  }

  return {
    loadDocById,
    loadDoc,
    saveDoc
  }

}
